#include "touch.h"
#include <stdio.h>
#include <sys/ioctl.h>
#include"header.h"
#include"file_index.h"
#include"double_cir_list.h"
#include <pthread.h>
struct touch_data xy;
static int fd_fifo; //管道文件

int  VideoInit() //初始化
{
    //判断是否存在管道文件， 不存在才创建
    if (access("/fifo", F_OK)) //默认管道文件创建在根目录 F_OK 判断是否存在
    {
        //如果条件成立，不存在
        mkfifo("/fifo", 777);//创建管道文件
    }

    fd_fifo = open("/fifo", O_RDWR);
    if (fd_fifo == -1)
    {
        printf("打开管道文件失败！\n");
        return -1;
    }

    return 0;
}

int  VideoFree() //资源回收
{
    system("killall -9 mplayer");
   // ShowBmp(0, 0, "./rec/main.bmp"); //显示主界面
    //PI.Ts_x = -1;
    //PI.Ts_y = -1;
char *bmp_name = "control.bmp";
    
    lcd_show_pic(bmp_name);
    xy.x=-1;
    xy.y=-1;
    return 0;
}

int  SendCmd(char *cmd)//发送命令
{
    write(fd_fifo, cmd, strlen(cmd));
    return 0;
}

void *lcd_check(void *arg);

void *media_control(void *arg);

void *music_control(void *arg);

void *beep_control(void *arg);

void *led_ctrl(void *arg);

void *lcd_disaplay(void *arg);

int main(int argc,char **argv)
{
int ret;
	pthread_t tid_led_ctrl;
	pthread_t tid_beep_control;
struct touch_data xy;
char *bmp_name = "main.bmp";
lcd_show_pic(bmp_name);
xy=get_touch_xy();
while(1)
{
	int fd;
	int set;
       // 获取触摸屏坐标
        xy = get_touch_xy();
        if (xy.x == -1 || xy.y == -1) {
            // 假设-1是错误标志
            printf("获取触摸屏坐标失败，请重试。\n");
            continue; // 如果想要重试
}
if(xy.x > 640 && xy.x < 780 && xy.y > 400 && xy.y <460)
{
	
char *bmp_name = "control.bmp";
    
    lcd_show_pic(bmp_name);
	 xy=get_touch_xy();

}
if(xy.x > 180 && xy.x < 350 && xy.y > 250 && xy.y < 310)//led_check
{
		char *bmp_name = "control.bmp";
		//主线程	
	int ret;
	pthread_t tid_lcd_check;
	ret = pthread_create(&tid_lcd_check, NULL,lcd_check, NULL);
	if(ret < 0)
	{
	printf("lcd check failed\n");
	}
	while(1){
	 xy=get_touch_xy(); 
	 if(xy.x > 700 && xy.x < 800 && xy.y > 0 && xy.y < 50)
	{
		pthread_cancel(tid_lcd_check);
		lcd_show_pic(bmp_name);
		 xy=get_touch_xy();
		 break;
		}
		}
		
		}
	if(xy.x > 180 && xy.x < 350 && xy.y > 150 && xy.y < 210)//led
{

	fd = open("/dev/Led", O_RDWR);     
	if(fd<0){
		perror("open:");
		return -1;
	}
	ret = pthread_create(&tid_led_ctrl, NULL,led_ctrl, NULL);
	if(ret < 0)
	{
	printf("lcd check failed\n");
	}
	while(1){
	 xy=get_touch_xy(); 
	  if(xy.x > 350 && xy.x < 420 && xy.y > 160 && xy.y < 230)
	{	
		ioctl(fd, LED1, 0); // 调用ioctl函数，传入LED1的魔幻数和1，表示打开LED1
		
	}
	else if(xy.x > 250 && xy.x < 320 && xy.y > 160 && xy.y < 230)
	{
		  ioctl(fd, LED1, 1); // 调用ioctl函数，传入LED1的魔幻数和1，表示关闭LED1
		
	}
	else if(xy.x > 590 && xy.x < 660 && xy.y > 160 && xy.y < 230)
	{
		  ioctl(fd, LED2, 0); // 调用ioctl函数，传入LED1的魔幻数和1，表示打开LED2
		
	}
	else if(xy.x > 480 && xy.x < 550 && xy.y > 160 && xy.y < 230)
	{
	  ioctl(fd, LED2, 1); // 调用ioctl函数，传入LED1的魔幻数和1，表示关闭LED2
		
	}
	else if(xy.x > 355 && xy.x < 425 && xy.y > 300 && xy.y < 370)
	{
	  ioctl(fd, LED3, 0); // 调用ioctl函数，传入LED1的魔幻数和1，表示打开LED3
		
	}
	else if(xy.x > 250 && xy.x < 320 && xy.y > 300 && xy.y < 370)
	{
		  ioctl(fd, LED3, 1); // 调用ioctl函数，传入LED1的魔幻数和1，表示关闭LED3
		
	}
	 else if(xy.x > 590 && xy.x < 660 && xy.y > 300 && xy.y < 370)
	{
		  ioctl(fd, LED4, 0); // 调用ioctl函数，传入LED1的魔幻数和1，表示打开LED4
		
	}
	 else if(xy.x > 480 && xy.x < 550 && xy.y > 300 && xy.y < 370)
	{
	  ioctl(fd, LED4, 1); // 调用ioctl函数，传入LED1的魔幻数和1，表示关闭LED4
		
	}
	 else if(xy.x > 30 && xy.x < 150 && xy.y > 30 && xy.y < 80)
	{
		pthread_cancel(tid_led_ctrl);
		lcd_show_pic(bmp_name);
		 xy=get_touch_xy();
		 break;
		}
		}
		
		}
 if(xy.x > 430 && xy.x < 600 && xy.y > 250 && xy.y < 310)//数码相册
{
	bmp_name = "control.bmp"; 
	int ret;
	pthread_t tid_lcd_disaplay;
	ret = pthread_create(&tid_lcd_disaplay, NULL,lcd_disaplay, NULL);
	if(ret < 0)
	{
	printf("photo play failed\n");
   }
   while(1){
	xy=get_touch_xy(); 
	
	if(xy.x > 700 && xy.x < 800 && xy.y > 0 && xy.y < 50)
	{
		pthread_cancel(tid_lcd_disaplay);
   		 lcd_show_pic(bmp_name);
   		  xy=get_touch_xy();
   		  break;
   		  }
		
		}
}
if(xy.x > 430 && xy.x < 600 && xy.y > 150 && xy.y < 210)//蜂鸣器
{
	bmp_name = "control.bmp"; 
	fd = open("/dev/beep", O_RDWR);      //打开设备，成功返回0
	if(fd<0){
		perror("open:");
		return -1;
	}
	ret = pthread_create(&tid_beep_control, NULL,beep_control, NULL);
	if(ret < 0)
	{
	printf("beep failed\n");
  	 }
	while(1){
	xy=get_touch_xy(); 
	if(xy.x > 130 && xy.x < 380 && xy.y > 130 && xy.y < 380)
	{	
	
	 ioctl(fd, 0, 1);                 //BUZZER on
		
		}
	else if(xy.x > 440 && xy.x < 690 && xy.y > 130 && xy.y < 380)
	{
		
	ioctl(fd, 1, 1);                //BUZZER off
		}
		
	if(xy.x > 15 && xy.x < 195 && xy.y > 10 && xy.y < 70)
	{
		pthread_cancel(tid_beep_control);
   		 lcd_show_pic(bmp_name);
   		  xy=get_touch_xy();
   		break;
	}
	
	}
	
   
}
if(xy.x > 180 && xy.x < 350 && xy.y > 350 && xy.y < 410)//音乐播放器
{
		bmp_name = "control.bmp"; 
		int ret;
	pthread_t tid_music_control;
	ret = pthread_create(&tid_music_control, NULL,music_control, NULL);
	if(ret < 0)
	{
	printf("music failed\n");
  	 }
  	 int n = 0;
	int playing = 0;
	struct node *ps;
	char sys_cmd[100];
    system("clear");
	//双向链表初始化
    init_list();
	//扫描 "/home/songs/"目录，放入链表目录 
    file_index();
	//输出链表上的文件名
    display();
    
    ps = head->next;
	  
	while(1){
	xy=get_touch_xy(); 
		if(xy.x > 350 && xy.x < 470 && xy.y > 320 && xy.y < 440)
	{
		memset(sys_cmd, 0, sizeof(sys_cmd));
	sprintf(sys_cmd, "madplay /home/songs/%s &", ps->name);
	system(sys_cmd);//利用system函数调用madplay播放器播放*.mp3音乐
	playing = 1;
	printf("%s playing!\r\n",ps->name);
		}
	else if(xy.x > 510 && xy.x < 630 && xy.y > 320 && xy.y < 440)
	{
	//利用system函数调用killall命令将madplay暂停
			system("killall -STOP madplay &");
		}
	else if(xy.x > 20 && xy.x < 140 && xy.y > 320 && xy.y < 440)
	{
		//利用system函数调用killall命令恢复madplay的播放
		system("killall -CONT madplay &");

		}	
	else if(xy.x > 20 && xy.x < 140 && xy.y > 160 && xy.y < 280)
	{
		//利用system函数调用killall命令将madplay终止掉
system("killall -9 madplay");

		}
		else if(xy.x > 670 && xy.x < 790 && xy.y > 320 && xy.y < 440)
	{
		system("killall -9 madplay");//利用system函数调用killall命令将madplay终止掉
				ps = ps->next;
				memset(sys_cmd, 0, sizeof(sys_cmd));
				
				sprintf(sys_cmd, "madplay /home/songs/%s &", ps->name);
				printf("%s playing!\r\n",ps->name);
				system(sys_cmd);
				playing = 1;
		}	
		else if(xy.x > 180 && xy.x < 300 && xy.y > 320 && xy.y < 440)
	{
	system("killall -9 madplay");//利用system函数调用killall命令将madplay终止掉
				ps = ps->prev;
				memset(sys_cmd, 0, sizeof(sys_cmd));
				
				sprintf(sys_cmd, "madplay /home/songs/%s &", ps->name);
				printf("%s playing!\r\n",ps->name);
				system(sys_cmd);
				playing = 1;

		}		
	if(xy.x > 15 && xy.x < 195 && xy.y >10 && xy.y < 70)
	{
		pthread_cancel(tid_music_control);
   		 lcd_show_pic(bmp_name);
   		  xy=get_touch_xy();
   		break;
	}
	}
}

if( xy.x > 430 && xy.x < 600 && xy.y > 350 && xy.y < 410) //视频播放
{
bmp_name = "video.bmp"; 
 lcd_show_pic(bmp_name);
    VideoInit(); 
 int n = 0;
	int playing = 0;
	struct node *ps;
	char sys_cmd[100];
    system("clear");
	//双向链表初始化
    init_list();
	//扫描 "/home/songs/"目录，放入链表目录 
    file_mp4();
	//输出链表上的文件名
    display();
    
    ps = head->next;


    while (1) {
        //获取触摸屏的坐标
        xy = get_touch_xy();

        if (xy.x > 487 && xy.x < 637 && xy.y > 410 && xy.y < 480) {
      
			 system("mplayer -slave -quiet -input file=/fifo -geometry 0:0 -zoom -x 800 -y 400 ./home/mp4/Tom.mp4 &");

       }  
        if (xy.x > 650 && xy.x < 800 && xy.y > 410 && xy.y < 480) {
            printf("暂停/播放按钮！\n");
            SendCmd("pause\n");
       }
   
       if (xy.x > 650 && xy.x < 800 && xy.y > 0 && xy.y < 60) {
          
           printf("退出按钮！\n");
           VideoFree();
            break;
        }
    }
//VideoFree();
  }
}
return 0;
}



